You are viewing the community [info]ru_python

python по русски [entries|friends|calendar]
Ру_питон

[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

[22 May 2012|11:41am]

kolbusa
Декоратор для статических переменных.
def withstatic(**kwargs):
    def helper(f):
        def wrapper(*args):
            for vn,vv in kwargs.iteritems():
                if not hasattr(wrapper, vn):
                    setattr(wrapper, vn, vv)
            f(*args)
        return wrapper
    return helper
Пример:
@withstatic(x=-1)
def f(y):
    print 'x = %d, y = %d' % (f.x, y)
    f.x = y

for y in range(10):
    f(y)
Вывод:
# ./t.py
x = -1, y = 0
x = 0, y = 1
x = 1, y = 2
x = 2, y = 3
x = 3, y = 4
x = 4, y = 5
x = 5, y = 6
x = 6, y = 7
x = 7, y = 8
x = 8, y = 9
Костыль? Велосипед? Боян? А как правильно?

PS. Хотелось бы еще избавится от необходимости писать function_name.variable_name.
2 comments|post comment

распарсить и изменить части url [18 Apr 2012|04:41pm]

_winnie
Нужно взять URL и заменить некоторые части, для того что бы показать пользователю в красивом виде. Проблема в том, что бы собрать url из кусков обратно.

Например,

http://xn--80a1acny.xn--p1ai/resp_engine.aspx?Path=RP/INDEX/RU/Home/Search&keyword=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
в
http://почта.рф/resp_engine.aspx?Path=RP/INDEX/RU/Home/Search&keyword=привет

URL легко распарсить при помощи urlparse.urlsplit. Дальше я в try/except заменяю host.decode('idna').encode('UTF-8') и query = urllib.unquote_plus(query).decode('UTF-8').encode('UTF-8')

Проблема в том, что urlparse позволяет распарсить запрос, но не позволяет заменить его части, он ведёт себя как иммутабельный тупл.

Можно написать код:
протокол и хост соединяем через ://
добавляем path
если query не пустой, то добавляем его через '?'
если хэш-тег (#fragment) не пустой, добавляем его через #


но вроде urllib уже умеет это делать, проблема только в передаче параметров - SplitResult.geturl требует на входе SplitResult, а я не могу собрать свой SplitResult! И я не уверен на 100% в том что я - корректно склею.

updated: в конце концов получилось что-то такое - http://dobrokot.ru/dump/user_friendly_url.py
updated: конретно на заданный вопрос - ответ urlparse.urlunsplit, умудрился просмотреть его в документации (правда, мне понадобилась чуть более тонкая логика в склейке). Спасибо [info]Andy Shevchenko-ядовитому!
29 comments|post comment

Скрипт для перекодировки текстовых файлов в кодировку по умолчанию [12 Apr 2012|06:49pm]

mat_alex

В Линуксе для перекодирования текстовых файлов есть программа iconv, только вот она обрабатывает файлы по одному. Если надо обработать много файлов, то можно написать bash-скрипт, а можно создать свою собственную программу. Что я и сделал, и сейчас прошу участников сообщества оценить продукт моего творчества.
Чтобы воспользоваться скриптом, надо указать два аргумента: кодировку исходных файлов и путь к папке, где эти файлы лежат.

 


#!/usr/bin/python3.2
#_*_coding: utf-8_*_
import os
import codecs
from locale import getlocale
from sys import argv
"""
First argument must be encoding of source files. 
Second argument must be path to the files
"""

# Остановить выполнение скрипта, если
# не указаны нужные параметры
if len (argv) < 2:
        exit()
# Get the entered name of a source encoding
# Имя кодировки считываемых фалов
readingencode=argv[1]
# Go to the working directory
os.chdir(argv[2])
# Get the name of a default encoding
# Системная кодировка
default_encode=getlocale()[1]
# Create the directory for new files
# Создается папка для сохранения новых файлов
writedir='%sfiles/' % default_encode
os.mkdir(writedir)
# Read the current directory
# Считывается содержимое папки
Lsdir=os.listdir()
# Список, в который записываются имена читаемых файлов
files=[]
for file in Lsdir:
        if os.path.isdir(file) == False:
                files.append(file)
for file in files:
        # Read data from the original file with the specified encoding
        readfile=codecs.open(file, encoding=readingencode)
        readlist=readfile.readlines()
        writefile=codecs.open(writedir + file, 'w', default_encode)
        # Write data to a new file with the default encoding
        for string in readlist:
                writefile.write(string + '\n')
        readfile.close()
        writefile.close()

P.S. В Windows этот скрипт не тестировался, поэтому, вполне возможно, Windows-пользователям придется что-то подкорректировать.

16 comments|post comment

[11 Apr 2012|02:51pm]

slach
Добрый день,
питон изучаю не так давно
так что прошу ногами не пинать

вопрос возник

существует ли какой либо способ получить аналог php'шного $_SERVER['REQUEST_URI'] ???
желательно фреймворко независимый!

т.е. вот есть я так понимаю
wsgiref.util.request_uri()
но ей на вход нужен dict environ...
вопрос... как этот самый dict правильно получить например в django/pylons/любой другой фреймворк умеющий WSGI?
12 comments|post comment

SQLObject 1.3.0 [31 Mar 2012|03:47pm]

phd

Выпущен SQLObject 1.3.0. Изменения:

  • Драйвер Постгреса конвертирует исключения DB API в исключения SQLObject.
  • Большое обновление драйвера Firebird, переписан и расширен код интроспекции.
  • Полный список новостей (на английском) можно посмотреть здесь: http://sqlobject.org/News.html.

SQLObject - это библиотека объектно-реляционного отображения. Каждая таблица представлена классом, каждая строка таблицы - экземпляром этого класса, каждая колонка (атрибут) - питоновским атрибутом. Библиотека SQLObject проста в использовании; не претендует на универсальность и всеохватность, но основные операции с SQL поддерживает. SQLObject работает со следующими БД: MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL и MaxDB (SAPDB). Работает с Python 2.4 по 2.7.

post comment

The Ultimate Question of Life, the Universe, and Everything [22 Feb 2012|09:10pm]

gegmopo4
hash("ePjNTUhitHkL")
post comment

Примеры или документация по hachoir [21 Mar 2012|07:56pm]

dil
существуют в природе? Мне его идея понравилась, а документации нигде нету.
Остаётся RTFS, но это грустно.
post comment

PyCharm & curses [15 Mar 2012|01:35pm]

maycat
может кто подскажет, есть ли возможность научить pycharm запускать код в другом окне терминала, а не в собственной console?

пробую кодить с urwid (для разработки интерфейса в консоли) и при запуске в консоли PyCharm-a естественно ничего не работает, а каждый раз кликать в соседний терминал и запускать там - не очень удобно :((
2 comments|post comment

установка pygame [04 Mar 2012|12:01am]

sigma_z_1980
работаю в Python 2.7.2

скачал отсюда стабильную версию 1.8.1, до этого поставил sdl-config и sdl-mpeg. При установке требуется куча зависимостей, типа libgcc, которые в свою очередь требуют других, итд, при этом sdl-config и sdl-mpeg почему-то не обнаруживаются. Что можно сделать? До этого пробовал поставить версию 1.9, которая этих зависимостей тоже не находила, оcобенно gcc
1 comment|post comment

Ищутся Python-developers и QA в СПб [27 Feb 2012|11:02pm]

michael_xiii
"Ищут пожарные, Ищет милиция, Ищут фотографы. В нашей столице, Ищут давно, Но не могут найти. Парня какого-то. Лет н-дцати" (c)

Очень и очень ищутся хорошие люди, которые станут участниками проекта omlet.ru

Две градации Python ( Junior и Senior ) и QA (те, кто помогут с качеством).

Вакансия Junior - описание
Вакансии Senior и тамже - вакансия QA

Компания Стрим, дочернее предприятие МТС

Что мы предлагаем?

  • Работу в большом и интересном проекте
  • Офис - ст. метро Василеостровская + 5 минут ходьбы - и то прогулочным шагом 
  • Действительно неординарные задачи
  • Полностью белое оформление и ЗП
  • Повышенный отпуск - как компенсация за ненормированный рабочий день
  • Корпоративную симку для связи
  • После испытательного срока - ДМС
Резюме ожидаются на адрес michael_xiii()mail.ru . Кто сомневается - напишу корпоративный адрес в личке, спамботов кормить не хочу ;-) 

Если кто-то перепостит - заранее большое спасибо!
2 comments|post comment

Vim+python [08 Dec 2011|10:06am]

boomzoomer_comp
Небольшой видеоролик про редактирование кода в vim.
Краткое содержание.
1. Использование аббревиатур.
2. Плагин MRU
3.Плагин tagbar
Сделано с помощью свободного редактора OpenShot — для изготовления видеороликов в домашних условиях он оказался вполне пригоден.
http://youtu.be/eagC7PcGcCk
3 comments|post comment

[10 Feb 2012|09:23pm]

tretiy3
Привет!
Есть несколько структур данных, в которых хранятся обычные питонские словари, вида
{"a":1,"b":2}

Структуры разной сложности. Есть, например, просто словарь, который хранит эти маленькие словарики
{"key":{"a":1,"b":2},
 "key1":{"a":10,"b":20}}

А есть и всякие сложные штуки типа:
["A",["B",[{"a":1,"b":2},{"a":10,"b":20}]],"A1",["B",[{"a":1,"b":2},{"a":10,"b":20}]]]

Все структуры создаются во время старта приложения.
Словарики читаются из базы.
Структуры содержат ссылки на эти словарики, так, например, {"a":1,"b":2} сидит ссылкой сразу в нескольких стуктурах.
Во время создания очередной структуры выясняется, что словарик {"a":1,"b":2} больше не нужен. Его нужно вынести нах из всех структур где он уже участвует. Вопрос: как это лучше сделать? В смысле, чтоб не проходить заново все эти структуры.
Думаю в сторону: сделать этот маленький словарик унаследованным от dict и в каждой коллекции совать ему что? указатель на эту коллекцию? метод, который вынесет этот словарик из нужной коллекции?
Спасибо.
27 comments|post comment

EKBPY - конференция по Python - 10 февраля 2012 [31 Jan 2012|03:39pm]

megabulldog
10 февраля 2012 года в Екатеринбурге пройдет
EKBPY - Конференция для настоящих и будущих разработчиков на Python

Мероприятие обещает быть полезным как для опытных питонистов, так и для тех, кому интересен этот язык программирования, но пока нет практического опыта его применения.

Содержание конференции составляют 10 докладов и 3 мастер-класса от ведущих питонистов УрФО.
Более подробное описание программы конференции можно увидеть на сайте: http://ekbpy.ru/programma/

Стоимость участия: 1500 рублей с человека.
5 comments|post comment

3 мелких патча для Skype4py [25 Jan 2012|07:00pm]

phd
http://phdru.name/Software/Python/#skype4py

  • segfault.patch - инициализация GLib для предотвращения segfault;
  • exec.patch - исправлено число параметров в вызове os.execlp для запуска Skype;
  • systembus.patch - возможность переключиться на SystemBus вместо SessionBus в D-Bus;
  • combined.patch - все 3 одним патчем.
post comment

Возобновим традицию? Спринты-2012! [10 Jan 2012|03:08pm]

suguby
Доброго времени дня, уважаемые!

Коллега [info]_darkus_ предлагает выходные провести с пользой - http://users.livejournal.com/_darkus_/628954.html
А мы можем оформить все это в виде спринта: публикуете ответы и сюда тоже, после раскрытия ответов коллегой [info]_darkus_ проведем фотофиниш :)

Условий задачки не знаю пока сам. Вопросы - коллеге [info]_darkus_
Возможна задержка фотофиниша, так как сам буду в отпуске, а там энторнета не то что бы нет... GPRS в зоне неуверенного приема %)
1 comment|post comment

проблема с установкой matplotlib в python2.7.2 [24 Dec 2011|09:08pm]

sigma_z_1980
работаю в МакОС 10.6.8. Поставил в Эклипсе новый интерпретатор, 2.7.2, потом поставил matplotlib соответствующий, правда для МакОС 10.3. Вот получается при импорте этого модуля такая ерунда:

если обычную python-консоль запустить через arch -i386 python, то модуль импортируется полностью нормально (т.е. работает). Если же я это делаю через Эклипс или просто без arch, при import matplotlib или from matplotlib import * сообщений об ошибке не появляется, но из модуля не импортируется ничего толком. А вот если попытаться сделать что-то вроде import matplotlib.pyplot или import matplotlib.pylab, то появляется сообщение

no matchin architecture in universal wrapper

что говорит о конфликте версий. Соответственно, ничего не работает. Запуск arch -i386 ./eclipse не помог, переустановка интерпретатора и добавление matplotlib в forced builtins тоже. Модуль под 10.6.х я не нашёл. Что посоветуете?
6 comments|post comment

Job Proposal [22 Dec 2011|09:57am]

ext_943862
International recruiting Company WORLD STAFF ® for the client is looking for highly qualified personnel.
Our client is a professional software development consultancy
Position: SENIOR PYTHON ENGINEER U519 – PE
DUTIES:
  • To work on software architecture
  • Design and actual implementation of different functional parts of web system
  • To be able to advice on design
  • To contribute to server side components of the system
REQUIREMENTS:
  • MS/BS degree in Computing Sciences or equivalent is preferred
  • Upper intermediate level of English
  • At least 2 years of experience in working with Python
  • Strong OOP background
  • Strong algorithmic skills
  • Experience in architecture of complex systems
  • Experience with Python and JavaScript frameworks
  • Knowledge of design patterns, enterprise architecture and software engineering principles
  • Experience with revision control and bug tracking systems
  • Good communication skills and ability to deal with people
FOR CANDIDATES COMPANY OFFERS:
  • Challenging work in a stable company 
  • Participation in various and complex projects 
  • HIGH LEVEL OF INCOME depending on skills and experience + annual bonus
  • Flexible working hours
  • 24 days paid vacation
  • Medical insurance
Please send your CV to gp@worldstaff.com.ua marked as U519 – PE
International Recruiting Company WORLD STAFF ® - 25 years in Europe. 
post comment

django, wsgi, пакеты и маршруты [17 Dec 2011|11:38pm]

dil
Товарищи настоящие сварщики, просветите меня, пожалуйста по поводу логики использования PYTHONPATH в django.

Предположим, есть проект в /home/user/projects/foo и в нём есть поддиректория bar, содержащая приложение от этого проекта.

Django, очевидно, хочет, чтобы в PYTHONPATH присутствовал маршрут к /home/user/projects, а не /home/user/projects/foo (например, потому что в генерируемом django-admin'ом файле settings.py ROOT_URLCONF выглядит как 'foo.urls', а не просто 'urls'.

Соответственно, чтобы проект заработал в wsgi-сервере, в wsgi-файл пишется что-то типа
sys.path.append('/home/user/projects')
os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings'
, это всё понятно, логично, и описано в официальной документации.

А вот с модулем bar возникает проблема: ссылки на его компоненты по имени самого модуля, без имени проекта, т.е. 'bar.views' (а не 'foo.bar.views') работают из встроенного веб-сервера (manage.py runserver), но не работают из wsgi. Вообще говоря, это логично: через PYTHONPATH его по короткому имени действительно найти невозможно. Но почему он тогда доступен из встроенного сервера?

И главный вопрос: каков идеологически правильный способ сделать его доступным из-под wsgi? Дописывать ко всем ссылкам на него префикс проекта - неудобно и нелогично.
Добавить в PYTHONPATH ещё и /home/user/projects/foo? Это работает, но добавлять туда одновременно /home/user/projects и /home/user/projects/foo тоже кажется мне нелогичным.

Что скажут профессионалы?
10 comments|post comment

Кто тормозит - я, sqlite или django? [solved] [11 Dec 2011|12:03am]

dil
Создал в django минимально возможную модель из одного-единственного поля:
foo=models.IntegerField(primary_key=True).
В базе получилось оно самое:
CREATE TABLE "foo_foo" (
    "foo" integer NOT NULL PRIMARY KEY
);

Написал тестовую программку для загрузки данных из файла. Она проверяет, есть ли уже объект с таким значением (Foo.objects.get(foo=...)), если нет - создаёт и сохраняет в базу. При отключённой записи в базу программа летает, но стоит раскомментировать o.save() у свежесозданного объекта - начинаются дикие тормоза, на добавление одной записи уходит порядка секунды.

На чтение работает нормально: если программу прервать и запустить снова, то ранее загруженные записи она находит мгновенно, а на создании новых опять тормозит.

База пустая, там одна-единственная таблица, других приложений в проекте вообще нет. Удалять базу целиком и создавать заново пробовал, не помогает.

Вопрос: это sqlite по жизни такой тормозной, или django с ним как-то криво работает, или это я что-то не так делаю?

на всякий случай некоторые технические подробности )

Upd: проблема была вызвана автокоммитами после каждого save(). Решается использованием декоратора @transaction.commit_manually для функции, внутри которой крутится цикл, и transaction.commit() в конце этой функции.

Но почему автокоммиты занимают столько времени, я всё равно не понимаю.
12 comments|post comment

Python на мобильном. [08 Dec 2011|05:08pm]

eking_go
Для некоторых смартфонов (android, Nokia) есть возможность запускать на них приложения на python. На остальных (blackberry например - только java) По крайней мере больше ничего не нашел.

Т.к. основное приложение на python, клиент тоже хотелось-бы писать на нем. Нужно иметь возможность выдать текст на экран, получить текст от пользователя (ввод с клавиатуры), получить/отправить данные по http (на мобильном - клиент) и (это было-бы шикарно) прочитать (записать) файл из памяти телефона. Т.е. простейшие вещи. А поддерживать код на 2 языках сразу не удобно.

Может есть конвертер какой python - java (именно для мобильного) или еще как? Может я не там ищу (т.к в гугле мало вразумительного)? Может не с той стороны подхожу к вопросу?
11 comments|post comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]